package day0409;

/**
 * @Author Stringzhua
 * @Date 2024/4/9 16:39
 * description:
 * 用观察者模式实现下面的功能：这是一个有关猎头公司的典型的例子，有两个角色：
 * 猎头和寻找工作的人。
 * 找工作的人向猎头订阅，告知自己希望得到一份工作，
 * 当有新的工作机会的时候，猎头就会把这个信息通知给曾经向他订阅过的人。
 * 要求：用java或者C#语言编程实现。
 */
import java.util.ArrayList;
import java.util.List;

// 观察者接口
interface Observer {
    void update(String jobInfo);
}

// 猎头类
class HeadHunter {
    private List<Observer> observers = new ArrayList<>();

    public void subscribe(Observer observer) {
        observers.add(observer);
    }

    public void unsubscribe(Observer observer) {
        observers.remove(observer);
    }

    public void notifyObservers(String jobInfo) {
        for (Observer observer : observers) {
            observer.update(jobInfo);
        }
    }
}

// 寻找工作的人类
class JobSeeker implements Observer {
    private String name;

    public JobSeeker(String name) {
        this.name = name;
    }

    @Override
    public void update(String jobInfo) {
        System.out.println(name + "收到新工作信息：" + jobInfo);
    }
}

public class test01 {
    public static void main(String[] args) {
        HeadHunter headHunter = new HeadHunter();
        JobSeeker jobSeeker1 = new JobSeeker("张三");
        JobSeeker jobSeeker2 = new JobSeeker("李四");

        headHunter.subscribe(jobSeeker1);
        headHunter.subscribe(jobSeeker2);

        headHunter.notifyObservers("有一个Java开发工程师的职位空缺");
    }
}

